﻿#ifndef SERIALPORTWIDGET_H
#define SERIALPORTWIDGET_H

#include <QWidget>
#include <QTimer>
#include <QButtonGroup>

#include "ui_SerialPortWidget.h"

#include "GlobalDef.h"
#include "MessDispath.h"

#include "SerialPortController.h"

namespace Core {

	class SerialPortWidget : public QWidget
	{
		Q_OBJECT

	public:
		explicit SerialPortWidget(QWidget *parent = Q_NULLPTR);
		~SerialPortWidget();

	private Q_SLOTS:
		/**
		 * @brief	slotUpdatePortNameTimeout 定时器刷新串口信息
		 * @return 
		 */
		void slotUpdatePortNameTimeout();

		/**
		 * @brief	slotRepeatSendMsgTimeout 重复发送定时器
		 * @return 
		 */
		void slotRepeatSendMsgTimeout();

		/**
		 * @brief	slotSeleteSerialPortCurrentTextChanged 切换串口名称
		 * @param	text 串口名称
		 * @return 
		 */
		void slotSeleteSerialPortCurrentTextChanged(const QString &text);

		/**
		 * @brief	slotSendMsgTypeButtonClicked  设置发送的信息类型
		 * @param	id
		 * @return 
		 */
		void slotSendMsgTypeButtonClicked(int id);

		/**
		 * @brief	slotRecvMsgTypeButtonClicked 设置接收的信息类型
		 * @param	id 
		 * @return 
		 */
		void slotRecvMsgTypeButtonClicked(int id);

		/**
		 * @brief	slotRepeatSendCheckBoxStateChanged 设置是否重复发送
		 * @param	state 状态
		 * @return 
		 */
		void slotRepeatSendCheckBoxStateChanged(int state);

		/**
		 * @brief	slotSerialPortControlBtnClicked 串口控制按钮
		 * @return 
		 */
		void slotSerialPortControlBtnClicked();

		/**
		 * @brief	slotSerialPortSendMsgBtnClicked 发送串口信息
		 * @return 
		 */
		void slotSerialPortSendMsgBtnClicked();

		/**
		 * @brief	slotSerialPortMsgInfo 串口的信息
		 * @param	strMsg 信息
		 * @return 
		 */
		void slotSerialPortMsgInfo(int iMsgType, QString strMsg);

	private:
		/**
		 * @brief	初始化窗口
		 * @return 
		 */
		void initUI();

		/**
		 * @brief   刷新串口列表
		 * @return 
		 */
		void updateSerialPortList();

		/**
		 * @brief	updateSendMsgList 刷新发送的信息队列
		 * @param	strSnedMsg 发送的信息
		 * @return 
		 */
		void updateSendMsgList(QString strSnedMsg);

	private:
		Ui::SerialPortWidget ui;
		SerialPortController * m_pSerialPortController;				// 串口控制层
		QTimer * m_pTimerUpdate;									// 刷新串口列表
		QString m_strPortNameIndex;

		QButtonGroup * m_pSendButtonGroup;							// 发送配置
		QButtonGroup * m_pRecvButtonGroup;							// 接收配置

		QStringList m_strSendMsgList;								// 发送的消息队列
		QTimer * m_pTimerRepeatSend;								// 刷新串口列表
	};	

}//namespace Core 

#endif // SERIALPORTWIDGET_H